package com.wlj.utils.suanfa;

/**
 * @Author youan
 * @Date 2021/3/20 4:37 下午
 * 1.已有方法rand7()可生成 1 到 7 范围内的均匀随机整数，试写一个方法rand10()生成 1 到 10 范围内的均匀随机整数。
 * 不要使用系统的Math.random()方法。
 *
 * 2.给你个随机函数f，以p概率返回0，以1-p概率返回1，如何实现等概率返回0和1
 */
public class Suanfa11 {

    //等概率返回1-7
    public static int rand7(){
        return (int)(Math.random()*7)+1;
    }
    //等概率等到0和1
    public static int a(){
        int ans = 0;
        do{
            ans=rand7();
        }while (ans==4);
        return ans<4?1:0;
    }

    //等概率获得1-10
    public static int b(){
        int ans = 0;
        do {
            ans = (a()<<3)+(a()<<2)+(a()<<1)+(a()<<0);
        }while (ans<=15&&ans>=10);
        return ans+1;
    }


    public static int f(){
        return Math.random()<0.8?1:0;
    }

    //等概率返回0或1
    //10: p*(1-p)  ==  01：p(1-p)
    public static int g(){
        int first = 0;
        do{
            first = f();
        }while (first==f());
        return first;
    }

    public static void main(String[] args) {
        //1题 解
        System.out.println(b()+"");

        //2题 解
        System.out.printf(g()+"");
    }
}
